Skip to content

Conversation

@Shin-Jae-Yoon
Copy link
Member

@Shin-Jae-Yoon Shin-Jae-Yoon commented Oct 11, 2023

📌 과제 설명

  • URL 단축 기능을 개발하는 과제
  • 기본적으로 Base62 인코딩 방법 이용

👩‍💻 요구 사항과 구현 내용

  • URL 입력폼 제공 및 결과 출력
  • URL Shortening Key는 8 Character 이내로 생성
  • 단축된 URL 요청시 원래 URL로 리다이렉트
  • 단축된 URL에 대한 요청 수 정보저장 (optional)
  • Shortening Key를 생성하는 알고리즘 2개 이상 제공하며 애플리케이션 실행중 동적으로 변경 가능 (optional)

✅ PR 포인트

  • 많은 데이터가 저장될 것으로 예상되어, 추후, NoSQL과 같은 DB로 변경할 가능성이 있다고 생각했습니다. 따라서, Repository 단을 추상화 하였습니다.
  • 이 과정에서 Entity가 JPA에 의존하고 있었기에, 도메인 Entity와 JPA Entity를 따로 두게 되었습니다.
  • Repository 인터페이스가 저수준에 있을 때, 여전히 고수준인 서비스가 저수준을 의존하고 있기에 DIP를 적용시켜서 서비스 계층으로 끌어올렸습니다.
  • 최종적으로, 서비스 계층에 Repository 인터페이스, 인프라 계층에 RepositoryImpl, JpaRepository가 위치하게 되었습니다.

✅ 궁금한 점

  • 나누고 나서 보니, JPA에 의존하지 않는 설계로 구성하여 신기했지만, 과연 이렇게까지 추상화를 할 필요가 있을까 생각되었습니다. 예를 들어, JPA의 장점인 변경감지를 이용하지 못하여 어쩔 수 없이 쿼리를 한 번 더 날리는 경우가 존재했습니다.
  • 만약 DB를 변경해야 할 일이 있다면, 그때 가서 리팩토링 하는 것이 나을 지, 미리 추상화하는 것이 나을 지 궁금점이 생겼습니다.

💻 시연 영상

2023-10-11.8.38.21.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant